<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of contoladoraOrden
 *
 * @author Agustin
 */
class ControladoraOrden {

    private static $instancia;

    public static function getInstance() {
        if (!self::$instancia instanceof self) {
            self::$instancia = new self;
        }
        return self::$instancia;
    }

    public function traerUltimoId() {
        try {
            require_once '../Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance()->traerNumeroOrdenes();
            return $pO;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerUltimoIdFidelizar() {
        try {
            require_once '../Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance()->traerNumeroOrdenesFidelizar();
            return $pO;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function borrarOrdenFidelizar($numero) {
        try {
            require_once 'Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance()->borrarOrdenFidelizar($numero);
            return $pO;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function crearOrden($datos, $fidelizar) {
        try {
            require_once 'Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance();
            $fechaI = $datos[0];
            $timestamp = strtotime($fechaI);
            $domingo = strftime('%w', $timestamp);
            if ($domingo == 0) {
                $fechaI = $this->suma_fechas1($fechaI, 1);
            }
            $datos[0] = $fechaI;

//            if (!$pO->buscarOrden($datos[12], $datos[11], $datos[0], $fidelizar, $datos[13])) {
                $pO->crearOrden($datos, $fidelizar);
//            }
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function buscarOrden($cliente, $reclamo, $fecha, $fidelizar, $idLugar) {
        try {
            require_once 'Modelo/persistenciaOrden.php';

            $pO = PersistenciaOrden::getInstance();
            return $pO->buscarOrden($cliente, $reclamo, $fecha, $fidelizar, $idLugar);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function actualizarOrden($datos) {
        try {
            require_once 'Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance();
            $pO->actualizarOrden($datos);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function marcarOrden($datos) {
        try {
            require_once 'Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance();
            $pO->marcarOrden($datos);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerOrdenes($datos) {
        try {
            require_once '../Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance();
            return $pO->traerOrdenes($datos);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerOrdenesFidelizar($datos) {
        try {
            require_once '../Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance();
            return $pO->traerOrdenesFidelizar($datos);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function reportes($numReporte) {
        try {
            require_once '../Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance();
            return $pO->reportes($numReporte);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function suma_fechas1($fecha, $dia) {
        list($day, $mon, $year) = explode('/', $fecha);
        return date('Y-m-d', mktime(0, 0, 0, $mon, $day + $dia, $year));
    }

    public function suma_fechas2($fecha, $dia) {

        list($year, $mon, $day) = explode('-', $fecha);
        return date('Y-m-d', mktime(0, 0, 0, $mon, $day + $dia, $year));
    }

    public function calendarioOrdenes($fechaI) {
//Base para el array de ordenes.
//  1- dia ,2 id del q contiene orden, 3 html
//    echo $fechaI;
        require_once '../Modelo/persistenciaTrabajo.php';
        require_once '../Modelo/trabajos.php';
        require_once '../Modelo/cliente.php';
        require_once '../Modelo/reclamo.php';
        require_once '../Modelo/orden.php';
        $pt = PersistenciaTrabajo::getInstance();
        $fechaI = $this->suma_fechas1($fechaI, 0);
        $trabajos = $pt->traerTrabajos($fechaI);
        $arr = Array(Array(), Array(), Array(), Array(), Array(), Array());
        if ($trabajos != null) {
            $dia = 0;
            $timestamp = strtotime($fechaI);
            $domingo = strftime('%w', $timestamp);
            if ($domingo == 0) {
                $fechaI = $this->suma_fechas2($fechaI, 1);
            }

            foreach ($trabajos as $trabajo) {
                $agregar = true;

                while ($dia < 6 && $agregar) {
                    if ($fechaI != $trabajo->fechaInicio) {
                        $dia = $dia + 1;
                        $fechaI = $this->suma_fechas2($fechaI, 1);
                    } else {
                        $orden = $trabajo->orden;
                        $cliente = $orden[0]->cliente;
                        $reclamo = $orden[0]->reclamo;
                        $arr[$dia][$trabajo->posicion][0] = $orden[0]->numero;
                        $arr[$dia][$trabajo->posicion][1] = '<div></div>Responsable: ' . $cliente[0]->responsable . '</div><div> Reclamo: ' . $reclamo[0]->descripcion . '</div><div> Tiempo Parcial: ' . $trabajo->tiempoParcial . '</div><div> Porcentaje: ' . $trabajo->porcentaje . '%</div>';
                        $agregar = false;
                    }
                }
            }
        }
        return json_encode($arr);
    }

    public function diasSemana($fecha) {
        $fecha_esp = str_replace("/", "-", $fecha);
        $timestamp = strtotime($fecha_esp);
        $days = array();
        for ($i = 0; $i < 7; $i++) {
            $dia = strftime('%w', $timestamp);
            if ($dia != 0) {
                $days[] = $this->darDiasSemana($dia) . ' - ' . date('d', $timestamp);
            }
            $timestamp = strtotime('+1 day', $timestamp);
        }
        return $days;
    }

    private function darDiasSemana($dia) {
        switch ($dia) {
            case 1:
                return 'Lunes';
                break;
            case 2:
                return 'Martes';
                break;
            case 3:
                return 'Miércoles';
                break;
            case 4:
                return 'Jueves';
                break;
            case 5:
                return 'Viernes';
                break;
            case 6:
                return 'Sábado';
                break;
        }
    }

    public function alertaR($datos) {
        try {
            require_once '../Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance();
            return $pO->alertaR($datos);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerTrabajo($idorden) {
        try {
            require_once '../Modelo/persistenciaTrabajo.php';
            $pT = persistenciaTrabajo::getInstance();
            $tra = $pT->traerTrabajo($idorden);
            if (!$tra) {
                require_once '../Modelo/trabajos.php';
                $tra = new Trabajo(null);
            }
            return $tra;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function actualizarTrabajo($datos) {
        try {
            require_once 'Modelo/persistenciaTrabajo.php';
            $pT = PersistenciaTrabajo::getInstance();
            $pT->actualizarTrabajo($datos);
            return "Actualizado con éxito";
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerOrdenesSinTecnicos() {
        try {
            require_once '../Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance();
            return $pO->traerOrdenesSinTecnicos();
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerOrdenesSimplesParaEjec() {
        try {
            require_once '../Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance();
            return $pO->traerOrdenesSimplesParaEjec();
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerOrdenesSimplesClientes($id, $est) {
        try {
            require_once '../Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance();
            return $pO->traerOrdenesSimplesClientes($id, $est);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerOrdenesSimplesTecnicos($id) {
        try {
            require_once '../Modelo/persistenciaOrden.php';
            $pO = PersistenciaOrden::getInstance();
            return $pO->traerOrdenesSimplesTecnicos($id);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function agregarFuncOrden($datos) {
        try {
            require_once 'Modelo/persistenciaFuncionario.php';
            require_once 'Modelo/persistenciaOrden.php';
            $pF = PersistenciaFuncionario::getInstance();
            $pO = PersistenciaOrden::getInstance();
            if (count($datos[1]) > 1) {
                if ($datos[1][0] == '' || $datos[1][1] == '') {
                    $pO->actualizarPareja($datos[0], 0);
                } else {
                    $pO->actualizarPareja($datos[0], 1);
                }
                $pF->actualizarFuncionarioOrdenes($datos);
            } else {
                $pO->actualizarPareja($datos[0], 0);
                $pF->actualizarFuncionarioOrdenes($datos);
            }
            return '<h4>Guardado con éxito</h4>';
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

}

?>
